package projetopm.unidades;

/**
 *
 * @author Carlos Alberto
 */
public class Triangulo {

    private int ladoA, ladoB, ladoC;

    private boolean ladosFormamTriangulo() {
        if ((ladoA < ladoB + ladoC)
                && (ladoB < ladoA + ladoC)
                && (ladoC < ladoA + ladoB)) {
            return true;
        }
        return false;
    }

    private void validarComprimento(int comprimento) throws NumberFormatException {
        if (comprimento <= 0) {
            throw new NumberFormatException(
                    "Um comprimento não pode ser negativo ou igual a zero: "
                    + comprimento);
        }
    }

    private void validarTriangulo() throws NumberFormatException {
        if (!ladosFormamTriangulo()) {
            throw new NumberFormatException(
                    "Os lados informados não fecham o triângulo: "
                    + ladoA + ", " + ladoB + ", " + ladoC);
        }
    }

    public Triangulo(int ladoA, int ladoB, int ladoC) throws NumberFormatException {
        try {
            validarComprimento(ladoA);
            validarComprimento(ladoB);
            validarComprimento(ladoC);
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        try {
            validarTriangulo();
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        this.ladoA = ladoA;
        this.ladoB = ladoB;
        this.ladoC = ladoC;

    }

    public int getLadoA() {
        return ladoA;
    }

    public void setLadoA(int ladoA) throws NumberFormatException {
        try {
            validarComprimento(ladoA);
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        try {
            validarTriangulo();
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        this.ladoA = ladoA;
    }

    public int getLadoB() {
        return ladoB;
    }

    public void setLadoB(int ladoB) throws NumberFormatException {
        try {
            validarComprimento(ladoB);
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        try {
            validarTriangulo();
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        this.ladoB = ladoB;
    }

    public int getLadoC() {
        return ladoC;
    }

    public void setLadoC(int ladoC) throws NumberFormatException {
        try {
            validarComprimento(ladoC);
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        try {
            validarTriangulo();
        } catch (NumberFormatException nfe) {
            throw nfe;
        }

        this.ladoC = ladoC;
    }

    public int getPerimetro() {
        return (ladoA + ladoB + ladoC);
    }

    public double getArea() {
        double s = this.getPerimetro() / 2;
        return Math.sqrt(s * (s - ladoA) * (s - ladoB) * (s - ladoC));
    }

    public String getTipoTriangulo() {
        if ((ladoA == ladoB) && (ladoA == ladoC)) {
            return ("Triangulo Equilatero");
        }

        if ((ladoA != ladoB) && (ladoA != ladoC) && (ladoB != ladoC)) {
            return ("Triangulo Escaleno");
        }

        return ("Triangulo Isoceles");
    }
}